package basicservicelogic

import (
	"context"
	"property_service/dao/model"
	"property_service/dao/query"
	"property_service/internal/svc"
	"property_service/property_service"
	"property_service/utils/BeanUtils"
	"property_service/utils/result"

	"github.com/zeromicro/go-zero/core/logx"
)

type ContractMainAddLogic struct {
	ctx    context.Context
	svcCtx *svc.ServiceContext
	logx.Logger
}

func NewContractMainAddLogic(ctx context.Context, svcCtx *svc.ServiceContext) *ContractMainAddLogic {
	return &ContractMainAddLogic{
		ctx:    ctx,
		svcCtx: svcCtx,
		Logger: logx.WithContext(ctx),
	}
}

// ContractMainAdd 创建合同主表
func (l *ContractMainAddLogic) ContractMainAdd(in *property_service.ContractMain) (*property_service.ResponseId, error) {
	// 获取合同主表模型的查询构造器
	m := query.Use(l.svcCtx.Gorm).ContractMain
	// 创建一个新的合同主表模型对象，不包含ID、UpdatedAt、CreatedAt字段
	mod := &model.ContractMain{
		ContractNo:    in.ContractNo,                             // 合同编号
		ContractName:  in.ContractName,                           // 合同名称
		SupplierID:    in.SupplierID,                             // 乙方单位ID
		SignDate:      BeanUtils.GetDateFormat(in.SignDate),      // 签订日期
		ContractType:  in.ContractType,                           // 合同类型
		EffectiveDate: BeanUtils.GetDateFormat(in.EffectiveDate), // 有效日期
		ExpireDate:    BeanUtils.GetDateFormat(in.ExpireDate),    // 合同到期日
		DepartmentID:  in.DepartmentID,                           // 执行科室ID
		Amount:        in.Amount,                                 // 合同金额
		ContactPerson: in.ContactPerson,                          // 乙方联系人
		ContactPhone:  in.ContactPhone,                           // 乙方联系电话
		DeliveryDate:  BeanUtils.GetDateFormat(in.DeliveryDate),  // 到货日期
		RemindDays:    in.RemindDays,                             // 提醒天数
		ArchiveNo:     in.ArchiveNo,                              // 档案号
		PurchaseMode:  in.PurchaseMode,                           // 采购方式
		Content:       in.Content,                                // 合同内容
		Remark:        in.Remark,                                 // 备注
		StockID:       in.StockID,                                // 仓库ID
		TenantID:      in.TenantID,                               // 租户ID
		CreatedAtuser: in.CreatedAtuser,                          // 创建用户
	}

	// 使用上下文执行创建操作
	if err := m.WithContext(l.ctx).Create(mod); err != nil {
		res, err := result.Err(err).Ed()
		return l.buildResponse(mod.ID, res, err)
	}
	// 创建成功，返回成功响应
	res, err := result.Suc().AddEd()
	return l.buildResponse(mod.ID, res, err)
}

// 在 ContractMainAddLogic 结构体中添加辅助方法
func (l *ContractMainAddLogic) buildResponse(id int64, res *property_service.Response, err error) (*property_service.ResponseId, error) {
	return &property_service.ResponseId{
		Id:      id,
		Code:    res.Code,
		Message: res.Message,
	}, err
}
